
<?php
require_once('sendsms.php');


/**@brief Classe controladora responsavel pelas ações do usuário Professor
 * 
 *
 * Classe controladora responsavel pelas ações do usuário Professor.
 * Cada metodo deste correponde a uma view na pasta 'view\professor'
 *
 * \param Observação importante: o dado "$this->data" corresponde aos dados
 * passados via metodo post, usados nos formulários de cadastro
 * no view de cada ação.
 */
class ProfessorController extends AppController {

///Define o template usado pelo usuário logado
    public $layout = "layout_professor";
    ///Declara as classes usadas, no caso os Models que serão usados para persistencia.
    public $uses = array("Users","Disciplina","Turma","Diario", "Sms");

    /**
     * Metodo responsavel pela inicialização do template do professor. Exibe na tela a saudação.
     */
    function index() {

    //Carrega os dados de todas as disciplinas em que o professor esta matriculado
        $turmas=$this->Turma->all(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"))));

        //Adiciona o nome da disciplina no array de disciplinas
        foreach ($turmas as $i => $value) {
            $nome = $this->Disciplina->first(array("conditions" => array("id" => $turmas[$i]["disciplina_id"])));
            $turmas[$i]["nomedisciplina"]=$nome["nome"];
        }

        ///@return Envia o array de turmas para o view, para ser visualizado na tela inicial
        $this->set("turmas",$turmas );

    }

 /**Funcionalidade do sistema.
    *Metodo para alterar os dados, primeiro carrega os dados do professor logado
    *e manda para o view
    */
    function alterarDados() {
        $professor=$this->Users->first(array("conditions" => array("username" =>$this->UserAccessComponent->user("username") )));
        /// @return Esta função envia a variável $professor para o view
        $this->set("professor",$professor );

    }

    /**
     * Complemento do metodo alterarDados. Pega os dados do formulário e
     * atualiza o professor, caso necessário.
     */
    function resultadoAlterarDados() {
        $professor=$this->Users->first(array("conditions" => array("username" =>$this->UserAccessComponent->user("username") )));
        if($this->data) {
            if($this->data["password"]) {
                $this->Users->save($this->data);
            }
            else {
                $this->Users->save(array("id" => $professor["id"],
                    "nome" => $professor["nome"],
                    "username" => $professor["username"],
                    "password" => $professor["password"],
                    "email" => $this->data["email"],
                    "nivel" => "professor",
                    "cel" => $this->data["cel"]));
            }
            ///@return Envia para o view mensagem de confirmação
            $this->set("resultadoCadastro", "Dados pessoais atualizados com sucesso!");
        }
        $professor2=$this->Users->first(array("conditions" => array("username" =>$this->UserAccessComponent->user("username") )));
        ///@return Passa os novos valores do professor para o view
        $this->set("professor",$professor2 );
    }

 /**Funcionalidade do sistema.
     * Carrega as diciplinas na qual o professor esteja matriculado e envia para
     * o formulário, para ser selecionada.
     */
    function verHistorico() {
    //Carrega os dados de todas as disciplinas em que o professor esta matriculado
        $turmas=$this->Turma->all(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"))));

        //Adiciona o nome da disciplina no array de disciplinas
        foreach ($turmas as $i => $value) {
            $nome = $this->Disciplina->first(array("conditions" => array("id" => $turmas[$i]["disciplina_id"])));
            $turmas[$i]["nomedisciplina"]=$nome["nome"];
        }
        ///@return Envia para o view o array de turmas para ser selecionadas
        $this->set("turmas",$turmas );
    }

    /**
     * Complemento do metodo verHistorico.
     * Recebe a escolha do professor pelo formulário e busca todos os Sms enviados
     * por ele e manda para o view.
     */
    function listarHistorico() {
    ///@param Recebe o objeto $data contendo o id da disciplina selecionada
        $turma = $this->Turma->first(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"),
            "disciplina_id" => $this->data["disciplina"] )));

        //Carrega todos os Sms pelo professor e pela disciplina
        $sms=$this->Sms->all(array("conditions" => array("disciplina_id" => $this->data["disciplina"],
            "turma_id" => $turma["id"] )));

        ///@return Envia para o view o array de Sms, para ser visualizado
        $this->set("smss",$sms );
        $this->set("Disciplina",$this->Disciplina );
    }

 /**Funcionalidade do sistema.
     * Semelhante ao verHistorico, carrega as diciplinas na qual o professor esteja matriculado e envia para
     * o formulário, para ser selecionada.
     */
    function verDiario() {
        $turmas = $this->Turma->all(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"))));

        //Adiciona o nome da disciplina no array de disciplinas
        foreach ($turmas as $i => $value) {
            $nome = $this->Disciplina->first(array("conditions" => array("id" => $turmas[$i]["disciplina_id"])));
            $turmas[$i]["nomedisciplina"]=$nome["nome"];
        }

        ///@return Envia o array de disciplinas do professor para o view
        $this->set("turmas",$turmas );
    }

    /**
     * Complemento do método verDiario.
     * Recebe a escolha do aluno pelo formulário e busca as notas do diário de classe dos alunos
     * e manda para o view.
     */
    function listarDiario() {
    ///@param Recebe a variavel $data contendo a disciplina selecionada
        $turma = $this->Turma->first(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"),
            "disciplina_id" => $this->data["disciplina"] )));

        //Carrega o diario pelo id da turma e da disciplina
        $diarios=$this->Diario->all(array("conditions" => array( "disciplina_id" => $this->data["disciplina"],
            "turma_id" => $turma["id"] )));

        ///@param envia o array de Diarios para o view
        $this->set("diarios",$diarios);
        $this->set("Users",$this->Users);
    }

/**Funcionalidade do sistema.
     * Carrega as diciplinas na qual o professor esteja matriculado e envia para
     * o formulário, para ser selecionada. Para depois ser enviado um SMS para todos da disciplina
     */
    function novoAviso () {
        $turmas = $this->Turma->all(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"))));

        //Adiciona o nome da disciplina no array de disciplinas
        foreach ($turmas as $i => $value) {
            $nome = $this->Disciplina->first(array("conditions" => array("id" => $turmas[$i]["disciplina_id"])));
            $turmas[$i]["nomedisciplina"]=$nome["nome"];
        }

        ///@param envia o array de turmas para o view
        $this->set("turmas",$turmas );
    }
    /** Complemento da clase novoAviso.
     * Busca todos os alunos da turma selecionada, e envia o sms para todos eles.
     * Alem de persistir cada sms enviado.
     */

    function resultadoNovoAviso () {
    ///@param Recebe a variavel $data contendo a disciplina selecionada
        $turma = $this->Turma->first(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"),
            "disciplina_id" => $this->data["disciplina"] )));
        //Carrega todos os Sms pela disciplina
        $sms=$this->Sms->all(array("conditions" => array("disciplina_id" => $this->data["disciplina"] )));

        $date = date("Y-m-d H:i:s");

        $this->Sms->insert(array(   "texto" => $this->data["texto"],
            "turma_id" => $turma["id"],
            "disciplina_id" => $this->data["disciplina"],
            "users_id" => 0,
            "created" => $date,
            "modified" => $date));

        $diarios=$this->Diario->all(array("conditions" => array( "disciplina_id" => $this->data["disciplina"],
            "turma_id" => $turma["id"] )));
        foreach ($diarios as $diario) {
            $aluno=$this->Users->all(array("conditions" => array( "id" => $diario["users_id"])));

            // envia sms para todos os alunos de uma turma
            self::enviarSMS($aluno[0]["cel"],$this->data["texto"]);
        }

        //envia o array para o view
        //Carrega todos os Sms pela disciplina
        $sms=$this->Sms->all(array("conditions" => array("disciplina_id" => $this->data["disciplina"] )));

        ///@return Envia mensagem de confirmação do SMS
        $this->set("smss",$sms );
        $this->set("Disciplina",$this->Disciplina );
        $this->set("resultadoNovoAviso", "Aviso enviado com sucesso!!!");
    }

    /**
     * Metodo responsavel pela conexão do computador com o celular/modem, para envio de SMS
     */
    public function enviarSMS($celular,$mensagem) {
    ///@param Recebe o numero de celular e a mensagem
        $mensageiro = new SendSMS();
        $x = $mensageiro->envio("127.0.0.1", 8800, "", "", $celular, $mensagem);

    }

/**Funcionalidade do sistema.
 * Carrega as diciplinas na qual o professor esteja matriculado e permite
 * a visualização e edição das notas/faltas de todos os alunos da turma.
 */
    public function novaNota () {
        $turmas = $this->Turma->all(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"))));

        //Adiciona o nome da disciplina no array de disciplinas
        foreach ($turmas as $i => $value) {
            $nome = $this->Disciplina->first(array("conditions" => array("id" => $turmas[$i]["disciplina_id"])));
            $turmas[$i]["nomedisciplina"]=$nome["nome"];
        }

        ///@return Envia o array de turmas para o view, para serem selecionadas
        $this->set("turmas",$turmas );
    }

    /**
     * Complemento do metodo novaNota. Carrega o diario de classe de todos
     * os alunos matriculado na turma selecionada e envia para o view.
     */
    public function inserirNovaNota () {
        ///@param Recebe a variavel $data com o ID da disciplina selecionada
        $turma = $this->Turma->first(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"),
            "disciplina_id" => $this->data["disciplina"] )));

        //Carrega o diario pelo id da turma e da disciplina
        $diarios=$this->Diario->all(array(
            "conditions" => array( "disciplina_id" => $this->data["disciplina"],
            "turma_id" => $turma["id"] )));

        ///@return Envia o array de Diarios para o view
        $this->set("diarios",$diarios);
        $this->set("Users",$this->Users);
        $this->set("disciplina",$this->data["disciplina"]);

    }
    /**
     * Verifica se as notas do aluno foram modificadas e faz a atualização.
     * Grava a alteração e envia um SMS para o aluno, informando.
     */
    public function resultadoNovaNota () {
    ///@param Recebe o objeto $data com todas as informações do diario de classe
    ///do aluno, para ser verificado e armazenado.

    //Comparando notas do aluno com a modificacao, para ver se foi alterado

        $diario=$this->Diario->first(array(
            "conditions" => array( "disciplina_id" => $this->data["disciplina_id"],
            "turma_id" => $this->data["turma_id"], "users_id" => $this->data["users_id"] )));


        if ( $this->data["nota1"] != $diario["nota1"] ) {
            $tipo='Nota 1';
            $valor=$this->data["nota1"];
            $flag=1;
        // echo 'entrou nota1';

        }
        else if ($this->data["nota2"] != $diario["nota2"]) {
                $tipo='Nota 2';
                $valor=$this->data["nota2"];
                $flag=1;
            // echo 'entrou nota2';
            }
            else if ($this->data["nota3"] != $diario["nota3"]) {
                    $tipo='Nota 3';
                    $valor=$this->data["nota3"];
                    $flag=1;
                //  echo 'entrou nota3';
                }
                else if ($this->data["nfinal"] != $diario["nfinal"] ) {
                        $tipo='Nota Final';
                        $valor=$this->data["nfinal"];
                        $flag=1;
                    //  echo 'entrou notaF';
                    }
                    else if ($this->data["faltas"] != $diario["faltas"] ) {
                            $tipo='Faltas';
                            $valor=$this->data["faltas"];
                            $flag=1;
                        // echo 'entrou falta';
                        }
                        else {
                            $flag = 0;
                            echo 'entrou nada';
                        }
        //pr($this->data);
        //pr($diario);

        if ($flag == 1) {

        //setando data
            $date = date("Y-m-d H:i:s");

            //carregando nome da disicplina
            $disciplina = $this->Disciplina->first(array("conditions" => array("id" => $this->data["disciplina_id"])));

            $textoSms = 'Atualização da disciplina '. $disciplina["nome"].' turma '.$this->data["turma_id"].' sobre '.$tipo.': '.$valor;

            //prrechendo sms
            $this->Sms->insert(array( "texto" => $textoSms,
                "turma_id" => $this->data["turma_id"],
                "disciplina_id" => $this->data["disciplina_id"],
                "users_id" => $this->data["users_id"],
                "created" => $date,
                "modified" => $date));

            //Salvando diario
            $this->Diario->save($this->data);

             $aluno=$this->Users->first(array("conditions" => array("id" => $this->data["users_id"])));
            //Enviado sms
            self::enviarSMS($aluno["cel"],$textoSms);
            ///@return Envia mensagem de confirmação.
            $this->set("resultado",'Diário de Classe alterado!' );
        }
        else {
            $this->set("resultado",'Nada foi alterado!' );
        }

    }

    public function resultadoNovaNota2() {
        $turma = $this->Turma->first(array("conditions" => array( "users_id" => $this->UserAccessComponent->user("id"),
            "disciplina_id" => $this->data["disciplina"] )));

        $date = date("Y-m-d H:i:s");
        $disciplina = $this->Disciplina->first(array("conditions" => array("id" => $this->data["disciplina"])));
        $textoSms = 'Atualização da disciplina '. $disciplina["nome"].' turma '.$turma["id"].' sobre '.$this->data["tipo"].': '.$this->data["valor"];
        $this->Sms->insert(array( "texto" => $textoSms,
            "turma_id" => $turma["id"],
            "disciplina_id" => $disciplina["id"],
            "users_id" => $this->data["aluno"],
            "created" => $date,
            "modified" => $date));
        $diarioModificar = $this->Diario->first(array("conditions" => array("disciplina_id" => $this->data["disciplina"],
            "users_id" => $this->data["aluno"],
            "turma_id" => $turma["id"],)));
        if (strcasecmp($this->data["tipo"], 'nota 1') == 0) {
            $diarioModificar["nota1"]=$this->data["valor"];
            $this->Diario->save(array(
                "turma_id" => $diarioModificar["turma_id"],
                "disciplina_id" => $diarioModificar["disciplina_id"],
                "users_id" => $diarioModificar["users_id"],
                "nota1" => $this->data["valor"],
                "nota2" => $diarioModificar["nota2"],
                "nota3" => $diarioModificar["nota3"],
                "nfinal" => $diarioModificar["nfinal"],
                "faltas" => $diarioModificar["faltas"]));
        }
        else if (strcasecmp($this->data["tipo"], 'nota 2') == 0) {
                $this->Diario->save(array("turma_id" => $turma["id"],
                    "disciplina_id" => $disciplina["id"],
                    "users_id" => $this->data["aluno"],
                    "nota2" => $this->data["valor"]));
                $diario = $this->Diario->first(array("conditions" => array(
                    "turma_id" => $turma["id"],
                    "disciplina_id" => $turma["disciplina_id"],
                    "users_id" => $this->data["aluno"],)));
            }
            else if (strcasecmp($this->data["tipo"], 'nota 3') == 0) {
                    $this->Diario->save(array("turma_id" => $turma["id"],
                        "disciplina_id" => $turma["disciplina_id"],
                        "users_id" => $this->data["aluno"],
                        "nota3" => $this->data["valor"]));
                }
                else if (strcasecmp($this->data["tipo"], 'nota final') == 0) {
                        $this->Diario->save(array("turma_id" => $turma["id"],
                            "disciplina_id" => $turma["disciplina_id"],
                            "users_id" => $this->data["aluno"],
                            "nfinal" => $this->data["valor"]));
                    }
                    else if (strcasecmp($this->data["tipo"], 'faltas') == 0) {
                            $this->Diario->save(array("turma_id" => $turma["id"],
                                "disciplina_id" => $turma["disciplina_id"],
                                "users_id" => $this->data["aluno"],
                                "faltas" => $this->data["valor"]));
                        }

        $aluno=$this->Users->first(array("conditions" => array("id" => $this->data["aluno"])));

        // envia o sms para o celular do aluno que teve a nota atualizada
        self::enviarSMS($aluno["cel"],$textoSms);

        //Carrega o diario pelo id da turma e da disciplina
        $diarios=$this->Diario->all(array("conditions" => array("turma_id" => $turma["id"],
            "disciplina_id" => $disciplina["id"])));
        //envia o array para o view
        $this->set("resultadoNovaNota", "Nota/Falta atualizada com sucesso!!!");
        $this->set("diarios",$diarios);
        $this->set("Users",$this->Users);
    }
}

?>
